"use client"; import React from 'react'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { ScrollArea } from '@/components/ui/scroll-area'; import { getAllVendorsContractsCompletionSummary } from '@/lib/forms/vendor-completion-stats'; import { Loader, Users, RefreshCw } from 'lucide-react'; import { toast } from 'sonner'; interface VendorProgress { vendorId: number; vendorName: string; totalForms: number; tagCount: number; totalRequiredFields: number; totalFilledFields: number; completionPercentage: number; } export default function EDPProgressTestPage() { const [loading, setLoading] = React.useState(false); const [vendorProgress, setVendorProgress] = React.useState([]); const loadVendorProgress = async () => { setLoading(true); try { const result = await getAllVendorsContractsCompletionSummary(); if (result && result.vendors) { const progressData: VendorProgress[] = result.vendors.map(vendor => ({ vendorId: vendor.vendorId, vendorName: vendor.vendorName, totalForms: vendor.totalForms, tagCount: vendor.totalTags, totalRequiredFields: vendor.totalRequiredFields, totalFilledFields: vendor.totalFilledFields, completionPercentage: vendor.overallCompletionPercentage })); setVendorProgress(progressData); toast.success(`${progressData.length}개 벤더의 진척도를 불러왔습니다`); } else { toast.warning('벤더 데이터가 없습니다'); } } catch (error) { console.error('Error loading vendor progress:', error); toast.error(`벤더 진척도 로드 실패: ${error instanceof Error ? error.message : '알 수 없는 오류'}`); } finally { setLoading(false); } }; React.useEffect(() => { loadVendorProgress(); }, []); return (

벤더 진척도 현황

{/* Vendor Progress List */} 벤더별 작업 진척도 {loading ? (
벤더 진척도를 불러오는 중...
) : vendorProgress.length === 0 ? (
벤더 데이터가 없습니다.
) : (
{/* Header */}
벤더명
폼 개수
태그 개수
전체 필드
입력 필드
완성도
{/* Vendor Rows */}
{vendorProgress.map((vendor) => (
{vendor.vendorName}
{vendor.totalForms}
{vendor.tagCount}
{vendor.totalRequiredFields}
{vendor.totalFilledFields}
= 80 ? "default" : vendor.completionPercentage >= 50 ? "secondary" : "destructive" } > {vendor.completionPercentage}%
))}
)}
); }